# coding=utf-8
"""
@author: hyq
@time: 2019/8/3 15:51
"""
from sqlalchemy import create_engine, MetaData, Table
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base

# 创建数据库连接
# 数据库+第三方模块：//用户名：密码@数据库服务端IP：端口号/数据库名？编码
mysql_url = "mysql+pymysql://root:123456@106.12.114.95:3306/guest?charset=utf8"
engine = create_engine(mysql_url, echo=True)  # 数据库引擎，echo参数为True时，会显示每条执行的sql语句
Base = declarative_base()  # 生成orm基类，执行SQL语句的类就继承Base
metadata = MetaData(bind=engine)  # MetaData：存储数据库信息（比如各种表格）的目录


class Event(Base):
    # autoload参数默认为False，此时可以手动定义和添加column对象，若参数设定为True，则自动从数据库中导出column对象，导出的对象可能会替换我们设定的column对象
    __table__ = Table('sign_event', metadata, autoload=True)  # 自动加载表结构，注意前面是table，不是tablename

    # def outp(self):
    #     print(repr(self.__table__))


class Guest(Base):
    __table__ = Table('sign_guest', metadata, autoload=True)


# 创建与数据库的会话session class ,注意,这里返回给session的是个class类,不是实例
session = sessionmaker(bind=engine)


class DataBase():
    def __init__(self):
        self.session = session()  # 这里才是生成session实例可以理解为cursor

    def add_data(self, obj):
        '''添加数据'''
        try:
            self.session.add(obj)
            self.session.commit()
        except:
            self.session.rollback()
        finally:
            self.session.close()

    def delete_data(self, tableName):
        try:
            self.session.query(tableName).delete()
            self.session.commit()
        except:
            self.session.rollback()
        finally:
            self.session.close()


if __name__ == '__main__':
    db = DataBase()
    db.delete_data(Event)
    db.delete_data(Guest)